﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NHibernate;
using NHibernate.Cfg;
using System.Diagnostics;


namespace ThorMVR
{
    public partial class fCadEmp : Form
    {
        public fCadEmp()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
            this.MaximizeBox = false;
        }




        private ClassModels.GeralEmpresas popularBean(IList<ClassModels.GeralEmpresas> emp, IList<ClassModels.GeralEmpresasIe> empIE)
        {
            ClassModels.GeralEmpresas empresaBean = new ClassModels.GeralEmpresas();

            
            empresaBean._numero = emp[0]._numero;
            empresaBean._razaosocial = emp[0]._razaosocial;
            empresaBean._personalidade = emp[0]._personalidade;
            empresaBean._apelido = emp[0]._apelido;
            empresaBean._cpf_cnpj = emp[0]._cpf_cnpj;
            empresaBean._grupo = emp[0]._grupo;
            empresaBean._logradouro = emp[0]._logradouro;
            empresaBean._endereco = emp[0]._endereco;
            empresaBean._numero = emp[0]._numero;
            empresaBean._bairro = emp[0]._bairro;
            empresaBean._cep = emp[0]._cep;
            empresaBean._codibge = emp[0]._codibge;
            empresaBean._municipio = emp[0]._municipio;
            empresaBean._uf = emp[0]._uf;
            empresaBean._siglapais = emp[0]._siglapais;
            empresaBean._tel_ddd = emp[0]._tel_ddd;
            empresaBean._tel_principal = emp[0]._tel_principal;
            empresaBean._fax_ddd = emp[0]._fax_ddd;
            empresaBean._fax_principal = emp[0]._fax_principal;
            empresaBean._naturezajuridica = emp[0]._naturezajuridica;
            empresaBean._inscricaomunicipal = emp[0]._inscricaomunicipal;
            empresaBean._inscricaoestadual = emp[0]._inscricaoestadual;
            empresaBean._cnae = emp[0]._cnae;
            empresaBean._contribuinteipi = emp[0]._contribuinteipi;
            empresaBean._inscricaorural = emp[0]._inscricaorural;

            ClassModels.GeralEmpresasIe empresaIE = new ClassModels.GeralEmpresasIe();

            int i = 0;
            while(empIE[i]._uf != "")
            {
            empresaIE._idempresa = empresaBean._id;
            empresaIE._uf = empIE[i]._uf;
            empresaIE._inscricaoestadual = empIE[i]._inscricaoestadual;
            i++;
            }

          
            empresaBean.addIe(empresaIE);
     
            


            return empresaBean;
        }

        private void btn_AdicionarIe_Click_1(object sender, EventArgs e)
        {
            txt_ieoutroestado.Text.Trim();
            if ((cb_UfIEoutroestado.Text != "") && (txt_ieoutroestado.Text != ""))
            {
           
                dg_Ie.Rows.Add(cb_UfIEoutroestado.Text, txt_ieoutroestado.Text);

                cb_UfIEoutroestado.Text = "";
                txt_ieoutroestado.Clear();
            }
        }

        private void salvarEmpresa()
        {
            ClassModels.GeralEmpresas empresaBean = new ClassModels.GeralEmpresas();
            int j;
            Boolean b = Int32.TryParse(txt_empresa.Text, out j);
            if (b)
            {
                empresaBean._id = j;
                empresaBean._razaosocial = txt_razaosocial.Text;
                empresaBean._apelido = txt_apelido.Text;
                empresaBean._cpf_cnpj = txt_cnpj.Text;
                if (txt_grupo.Text == "")
                {
                }
                else
                {
                    empresaBean._grupo = Int32.Parse(txt_grupo.Text);
                }

                if (txt_cnpj.TextLength == 14)
                {
                    empresaBean._personalidade = "FISICA";
                }
                if (txt_cnpj.TextLength == 18)
                        {
                            empresaBean._personalidade = "JURIDICA";
                        }
                empresaBean._logradouro = txt_logradouro.Text;
                empresaBean._endereco = txt_endereco.Text;
                empresaBean._numero = txt_numerodoendereco.Text;
                empresaBean._complemento = txt_complemento.Text;
                empresaBean._bairro = txt_bairro.Text;
                empresaBean._cep = txt_cep.Text;
                empresaBean._codibge = txt_ibge.Text;
                empresaBean._municipio = txt_municipio.Text;
                empresaBean._uf = cb_Uf.Text;
                empresaBean._siglapais = txt_siglapais.Text;
                if (txt_ddd.Text == "")
                {
                }
                else
                {
                    empresaBean._tel_ddd = Int32.Parse(txt_ddd.Text);
                }

                empresaBean._tel_principal = txt_tel.Text;
                
                if (txt_dddfax.Text == "")
                {
                }
                else
                {
                    empresaBean._fax_ddd = Int32.Parse(txt_dddfax.Text);
                }
                empresaBean._fax_principal = txt_fax.Text;
                empresaBean._naturezajuridica = txt_naturezajuridica.Text;
                empresaBean._inscricaomunicipal = txt_im.Text;
                empresaBean._inscricaoestadual = txt_ie.Text;
                empresaBean._cnae = txt_cnae.Text;
                empresaBean._contribuinteipi = cb_ContribuinteDeIpi.Text;
                empresaBean._inscricaorural = txt_incricaodeprodutorrural.Text;

               
                IList<ClassModels.GeralEmpresasIe> empresaInscEst = new List<ClassModels.GeralEmpresasIe>();
                empresaBean._listGeralEmpresasIe = new List<ClassModels.GeralEmpresasIe>();
               
                int i = 0;
                while ((i <= dg_Ie.Rows.Count) && (dg_Ie.Rows[i].Cells[0].Value != null ))
                {
                    ClassModels.GeralEmpresasIe empresaIE = new ClassModels.GeralEmpresasIe();
                    empresaIE._idempresa = empresaBean._id;
                    empresaIE._uf = (string)dg_Ie.Rows[i].Cells[0].Value;
                    empresaIE._inscricaoestadual = (string)dg_Ie.Rows[i].Cells[1].Value;


                    empresaInscEst.Add(empresaIE);
                    
                    empresaBean.addIe(empresaInscEst.ElementAt(i));                    
                    i++;
                }

                using (ISession session = ClassModels.NHibernateHelper.GetCurrentSession())
                {

                    using (ITransaction transaction = session.BeginTransaction())
                    {

                        try
                        {
                            session.Merge(empresaBean);
                            session.BeginTransaction().Commit();
                            MessageBox.Show("A empresa " + empresaBean._id.ToString() + " - " + empresaBean._razaosocial + " foi gravada com sucesso!", "Gravação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        catch (Exception ex)
                        {
                            Tela_de_Erro.fErroPreenchimento erro = new Tela_de_Erro.fErroPreenchimento();
                            erro.preencherErros(ex.InnerException.ToString());
                            erro.Show();

                        }

                    }
                }

            }
        
        }

        private void limparCampos()
        {
            
            lEmpresaAtiva.Text = "";
            txt_razaosocial.Clear();
            txt_apelido.Clear();
            txt_grupo.Clear();
            txt_cnpj.Clear();
            txt_logradouro.Clear();
            txt_endereco.Clear();
            txt_numerodoendereco.Clear();
            txt_complemento.Clear();
            txt_bairro.Clear();
            txt_cep.Clear();
            txt_ibge.Clear();
            txt_municipio.Clear();
            cb_Uf.ResetText();
            txt_siglapais.Clear();
            txt_ddd.Clear();
            txt_tel.Clear();
            txt_fax.Clear();
            txt_dddfax.Clear();
            txt_naturezajuridica.Clear();
            txt_nomedanatureza.Clear();
            txt_im.Clear();
            txt_ie.Clear();
            txt_cnae.Clear();
            txt_nomedocnae.Clear();
            cb_ContribuinteDeIpi.ResetText();
            cb_UfIEoutroestado.ResetText();
            txt_ieoutroestado.Clear();
            txt_incricaodeprodutorrural.Clear();


            for (int i = 0; i <= (dg_Ie.Rows.Count - 1); i++)
            {
                try
                {
                    dg_Ie.Rows.RemoveAt(i);
                }
                catch (Exception ex)
                {
                }

            }
        }

        private Boolean verificarCampos()
        {
            List<String> errosEncontrados = new List<String>();
            Boolean erro = false;

            if (txt_empresa.Text == "")
            {

                errosEncontrados.Add("Sem numero da empresa preenchido!");
                erro = true;
            }


            if ((rb_PersonalidadeFisica.Checked = false) && (rb_PersonalidadeJuridica.Checked = false))
            {
                errosEncontrados.Add("Sem personalidade definida!");
                erro = true;
            }

            if (txt_razaosocial.Text == "")
            {
                errosEncontrados.Add("Sem razão social preenchida!");
                erro = true;
            }

            if (txt_apelido.Text == "")
            {
                errosEncontrados.Add("Sem apelido preenchido!");
                erro = true;
                
            }

            if (txt_cnpj.Text == "")
            {
                errosEncontrados.Add("Sem CPF/CNPJ preenchida!");
                erro = true;
            }

            if (txt_logradouro.Text == "")
            {

                errosEncontrados.Add("Sem logradouro preenchido!");
                erro = true;
            }

            if (txt_endereco.Text == "")
            {

                errosEncontrados.Add("Sem endereço preenchido!");
                erro = true;
            }

            if (txt_numerodoendereco.Text == "")
            {

                errosEncontrados.Add("Sem número do endereço preenchido!");
                erro = true;
            }

            if (txt_bairro.Text == "")
            {

                errosEncontrados.Add("Sem bairro preenchido!");
                erro = true;
            }

            if (txt_cep.Text == "")
            {

                errosEncontrados.Add("Sem CEP preenchido!");
                erro = true;
            }

            if (txt_ibge.Text == "")
            {

                errosEncontrados.Add("Sem código do IBGE preenchido!");
                erro = true;
            }

            if (txt_municipio.Text == "")
            {

                errosEncontrados.Add("Sem município preenchido!");
                erro = true;
            }

            if (cb_Uf.Text == "")
            {

                errosEncontrados.Add("Sem UF preenchida!");
                erro = true;
            }

            if (txt_siglapais.Text == "")
            {

                errosEncontrados.Add("Sem sigla do País preenchida!");
                erro = true;
            }

            if (txt_naturezajuridica.Text == "")
            {

                errosEncontrados.Add("Sem natureza jurídica preenchida!");
                erro = true;
            }
            if (txt_cnae.Text == "")
            {

                errosEncontrados.Add("Sem CNAE preenchido!");
                erro = true;
            }
            if (cb_ContribuinteDeIpi.Text == "")
            {

                errosEncontrados.Add("Sem Contribuição de IPI selecionado!");
                erro = true;
            }
            
            if (erro)
            {
                Tela_de_Erro.fErroPreenchimento mostrarErros = new Tela_de_Erro.fErroPreenchimento();

                for (int i = 0; i <= (errosEncontrados.Count() - 1); i++)
                {
                    mostrarErros.preencherErros(errosEncontrados.ElementAt(i).ToString());
                }
                mostrarErros.Show();
            }


            return erro;
        }

        private void salvarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (verificarCampos())
            {
            }
            else
            {
                salvarEmpresa();
                limparCampos();
            }


        
        }

        private void btn_RemoverIe_Click_1(object sender, EventArgs e)
        {
            try
            {
            if (dg_Ie.CurrentCell.Value != null )
            {
                dg_Ie.Rows.Remove(dg_Ie.Rows[dg_Ie.CurrentRow.Index]);
            }
            }catch (Exception ex)
            {
            
            }


        }

        private void txt_empresa_KeyDown(object sender, KeyEventArgs e)
        {
        
            if (e.KeyValue == 13)
            {
                procurarEmpresa();
            }
        }

        private Boolean procurarEmpresa()
        {
            limparCampos();
            
            ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

            IQuery query = session.CreateQuery("FROM GeralEmpresas WHERE id=:idEmpresa");

            query.SetString("idEmpresa", txt_empresa.Text.ToString());

            IList<ClassModels.GeralEmpresas> empresaBean = query.List<ClassModels.GeralEmpresas>();



            if (empresaBean.Count != 0)
            {
                lEmpresaAtiva.Text = empresaBean[0]._razaosocial;
                txt_razaosocial.Text = empresaBean[0]._razaosocial;
                txt_apelido.Text = empresaBean[0]._apelido;
                if (empresaBean[0]._cpf_cnpj.Length == 14)
                {
                    txt_cnpj.Mask = "##.###.###/####-##";
                    txt_cnpj.Text = empresaBean[0]._cpf_cnpj;
                    rb_PersonalidadeJuridica.Checked = true;
                }
                if (empresaBean[0]._cpf_cnpj.Length == 11)
                {
                    txt_cnpj.Mask = "###.###.###-##";
                    txt_cnpj.Text = empresaBean[0]._cpf_cnpj;
                    rb_PersonalidadeFisica.Checked = true;
                }
                txt_grupo.Text = empresaBean[0]._grupo.ToString();
                txt_logradouro.Text = empresaBean[0]._logradouro;
                txt_endereco.Text = empresaBean[0]._endereco;
                txt_numerodoendereco.Text = empresaBean[0]._numero;
                txt_complemento.Text = empresaBean[0]._complemento;
                txt_bairro.Text = empresaBean[0]._bairro;
                txt_cep.Text = empresaBean[0]._cep;
                txt_ibge.Text = empresaBean[0]._codibge;
                txt_municipio.Text = empresaBean[0]._municipio;
                cb_Uf.Text = empresaBean[0]._uf;
                txt_siglapais.Text = empresaBean[0]._siglapais;
                txt_ddd.Text = empresaBean[0]._tel_ddd.ToString();
                txt_tel.Text = empresaBean[0]._tel_principal;
                txt_dddfax.Text = empresaBean[0]._fax_ddd.ToString();
                txt_fax.Text = empresaBean[0]._fax_principal;
                txt_naturezajuridica.Text = empresaBean[0]._naturezajuridica;
                txt_im.Text = empresaBean[0]._inscricaomunicipal;
                txt_ie.Text = empresaBean[0]._inscricaoestadual;
                txt_cnae.Text = empresaBean[0]._cnae;
                cb_ContribuinteDeIpi.Text = empresaBean[0]._contribuinteipi;
                txt_incricaodeprodutorrural.Text = empresaBean[0]._inscricaorural;

                IList<ClassModels.GeralEmpresasIe> empresasIE = new List<ClassModels.GeralEmpresasIe>();

                empresasIE = empresaBean[0]._listGeralEmpresasIe;

                for (int i = 0; i <= (empresasIE.Count - 1); i++)
                {
                    dg_Ie.Rows.Add(empresasIE[i]._uf, empresasIE[i]._inscricaoestadual);
                }



            }
            else
            {
                MessageBox.Show("Nenhuma empresa encontrada!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            session.Close();

            return false;
        }

        private void rb_PersonalidadeJuridica_CheckedChanged(object sender, EventArgs e)
        {
            txt_cnpj.Mask = "##.###.###/####-##";
        }

        private void rb_PersonalidadeFisica_CheckedChanged_1(object sender, EventArgs e)
        {
            txt_cnpj.Mask = "###.###.###-##";
        }

        private void txt_naturezajuridica_TextChanged(object sender, EventArgs e)
        {
            Pesquisa.PesquisasCadastro pesquisa = new Pesquisa.PesquisasCadastro();

            IList<ClassModels.GeralNaturezaJuridica> naturezaJuridica = new List<ClassModels.GeralNaturezaJuridica>();

            naturezaJuridica = pesquisa.pesquisaNaturezaJuridica(txt_naturezajuridica.Text.ToString());

            if (naturezaJuridica.Count != 0)
            {
                txt_nomedanatureza.Text = naturezaJuridica[0]._descricao.ToString();
            }
            else
            {

                txt_nomedanatureza.Text = "Não Encontrado!";
            }


        }

        void txt_naturezajuridica_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyValue == 13)
            {
                ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

                IQuery query = session.CreateQuery("FROM GeralNaturezaJuridica WHERE codigo=:codigoNJ");

                query.SetString("codigoNJ", txt_naturezajuridica.Text.ToString());

                IList<ClassModels.GeralNaturezaJuridica> naturezaJuridica = query.List<ClassModels.GeralNaturezaJuridica>();

                if (naturezaJuridica.Count != 0)
                {
                    txt_nomedanatureza.Text = naturezaJuridica[0]._descricao.ToString();

                }
                session.Close();
            }

        }
        void txt_cnae_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyValue == 13)
            {
                ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

                IQuery query = session.CreateQuery("FROM GeralCnae WHERE codigo=:codigoCnae");

                query.SetString("codigoCnae", txt_cnae.Text.ToString());

                IList<ClassModels.GeralCnae> cnae = query.List<ClassModels.GeralCnae>();

                if (cnae.Count != 0)
                {
                    txt_nomedocnae.Text = cnae[0]._descricao.ToString();

                }
                session.Close();
            }
            }

        private void pesquisarCNAE()
        {
            ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

            IQuery query = session.CreateQuery("FROM GeralCnae WHERE codigo=:codigoCnae");

            query.SetString("codigoCnae", txt_cnae.Text.ToString());

            IList<ClassModels.GeralCnae> cnae = query.List<ClassModels.GeralCnae>();

            if (cnae.Count != 0)
            {
                txt_nomedocnae.Text = cnae[0]._descricao.ToString();

            }
            session.Close();
        }

        private void pesquisarNatureza()
        {
            ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

            IQuery query = session.CreateQuery("FROM GeralNaturezaJuridica WHERE codigo=:codigoNJ");

            query.SetString("codigoNJ", txt_naturezajuridica.Text.ToString());

            IList<ClassModels.GeralNaturezaJuridica> naturezaJuridica = query.List<ClassModels.GeralNaturezaJuridica>();

            if (naturezaJuridica.Count != 0)
            {
                txt_nomedanatureza.Text = naturezaJuridica[0]._descricao.ToString();

            }
            session.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
            Tela_de_Pesquisa.fPesquisa telaPesquisa = new Tela_de_Pesquisa.fPesquisa();

            telaPesquisa.pesquisaNaturezaJuridica();

            telaPesquisa.ShowDialog();

            txt_naturezajuridica.Text = telaPesquisa.value;

            pesquisarNatureza();

            telaPesquisa.Dispose();
            

         
          

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Tela_de_Pesquisa.fPesquisa telaPesquisa = new Tela_de_Pesquisa.fPesquisa();

            telaPesquisa.pesquisaCnae();

            telaPesquisa.ShowDialog();

            txt_cnae.Text = telaPesquisa.value;

            pesquisarCNAE();

            telaPesquisa.Dispose();
        }

        private void txt_cnae_TextChanged(object sender, EventArgs e)
        {

            Pesquisa.PesquisasCadastro pesquisa = new Pesquisa.PesquisasCadastro();

            IList<ClassModels.GeralCnae> cnae = new List<ClassModels.GeralCnae>();

            cnae = pesquisa.pesquisaCnae(txt_cnae.Text.ToString());

            if (cnae.Count != 0)
            {
                txt_nomedocnae.Text = cnae[0]._descricao.ToString();
            }
            else
            {

                txt_nomedocnae.Text = "Não Encontrado!";
            }

        }

        private void btn_salvar_Click(object sender, EventArgs e)
        {
            if (verificarCampos())
            {
            }
            else
            {
                salvarEmpresa();
                limparCampos();
            }

        }

        private void btn_pesquisarEmpresa_Click(object sender, EventArgs e)
        {
            txt_empresa.Clear();

            Tela_de_Pesquisa.fPesquisa pesquisa = new Tela_de_Pesquisa.fPesquisa();

            pesquisa.pesquisaEmpresa();

            pesquisa.ShowDialog();

            try
            {
                txt_empresa.Text = pesquisa.value.ToString();
            }
            catch (Exception ex)
            {
            }
            pesquisa.Dispose();

            if (txt_empresa.Text != "")
            {
                procurarEmpresa();
            }

        }

        private void txt_empresa_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void btn_sair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            ProcessStartInfo sInfo = new ProcessStartInfo("http://www.buscacep.correios.com.br/");

            Process.Start(sInfo);

            Close();
        }



        


        
    }
}
